_____ _    _         _____  _____ _   _          _____   _____  
    / ____| |  | |  /\   |  __ \|_   _| \ | |   /\   / _ \ \ / / _ \ 
   | |  __| |  | | /  \  | |__) | | | |  \| |  /  \ | | | \ V / | | |
   | | |_ | |  | |/ /\ \ |  _  /  | | | . ` | / /\ \| | | |> <| | | |
   | |__| | |__| / ____ \| | \ \ _| |_| |\  |/ ____ \ |_| / . \ |_| |
    \_____|\____/_/    \_\_|  \_\_____|_| \_/_/    \_\___/_/ \_\___/ 
                                                                     
                    ./Guarina0x0
Titulo: HackTheBox - Forge
Fecha: 29-09-2021
Descripcion: Enumeracion - Fuzzing - SSRF

Hack The Box - Forge Writeup

## Ping:

ping -c1 10.10.11.111

Mediante el comando ping vamos a trazar una ruta ICMP para ver si la maquina esta activa y ante que tipo de sistema operativo estamos

Podemos ver que la respuesta del ttl es 63 , el TTL en maquinas Linux es 64 y en maquinas Windows 128 , en este caso es 63 porque pasa por un nodo intermediario.

## Enumeracion :

Ahora vamos a proceder a ver que servicios tiene esta maquina abiertos para ello vamos a realizar una enumeracion de puertos:

Mediante el parametro --min-rate 5000 va a emitir paquetes no mas lento que 5000 paquetes por segundo

  • Puerto 22 SSH
  • Puerto 80 HTTP
  • Ahora vamos aplicar scripts basicos de Nmap para descubrir la version y servicios que trabajan bajo esos puertos y vamos a poder ver que nos reporta un dominio

    Puede ser que se este aplicando VirtualHosting que es la tecnica de tener varios dominios bajo una misma direccion IP , por lo que para que nos resuelva el dominio correctamente vamos a tener que guardarlo en /etc/hosts

    Ahora si enviamos una traza ICMP , vamos a ver que nos resuelve el dominio bajo la direccion IP 10.10.11.111

    ## Fuzzing :

    Vamos a dirigirnos al navegador y ver que nos reporta la pagina web , vamos a entrar mediante el dominio http://www.forge.htb , y nos reporta una galeria de imagenes y poca cosa mas.

    Por lo que vamos aplicar la tecnica de fuzzing para buscar directorios web potenciales que nos den mas informacion , para ello usaremos la herramienta Wfuzz

    Nos reporta varios directorios web que parecen interesantes

  • /uploads
  • /static
  • Vamos abrir el directorio web /upload y podemos ver que tenemos un panel para subir ficheros que podemos suponer que tienen que ser imagenes desde nuestro equipo o desde una URL

    Podemos ver que pasa si subimos una imagen de nuestro equipo

    Si la subimos nos reporta una ruta con una especie de hash que convierte la imagen

    Con la ruta que nos reporta podemos ver la imagen desde el navegador , podemos pensar en subir una shell reversa que se conecte a nuestro equipo de atacante para poder acceder a la maquina , podemos cambiarle la extension por imagen.php.jpg , pero esta tecnica no funciona

    Por lo que , voy aplicar fuzzing en subdominios para ver si tenemos algun subdominio de forge.htb que sea potencial

    Y nos vamos a encontrar con un subdominio de admin: http://www.admin.forge.htb , por lo que vamos a guardarlo en /etc/hosts

    Si abrimos este subdominio , nos va a decir que solo tenemos acceso si estamos dentro de la maquina

    ## Tecnica Ataque SSRF

    Si pensamos en un ataque al directorio /upload , podemos darnos cuenta que podemos intentar usar el ataque SSRF (Server Side Request Forgery)

    Es una vulnerabilidad ocurre cuando una aplicacion web permite hacer consultas HTTP de lado del servidor hacia un dominio arbitrario elegido por el atacante , lo que le permite al atacante hacer una conexion con los servicios de la infraestructura interna donde se aloja la web y exfiltrar informacion sensible

    Para usar esta tecnica es tan facil , como pasarle una URL al panel que teniamos en /upload y que nos de la URL junto con el hash que crea

    Cuando nos de la URL para ver la "imagen" desde el navegador , vamos a proceder a hacer un Curl desde la consola y asi vamos a poder ver la informacion que contiene el subdominio admin,forge.htb

    Podemos ver que nos reporta 2 directorios web

  • /announcements
  • /upload
  • Si volvemos hacer la misma tecnica pero ahora en el formulario para introducir la URL de la imagen , ponemos http://admin.forge.htb/announcements , vamos a poder ver el contenido de este directorio que no tenemos acceso mediante el navegador

    Nos reporta la credenciales del servicio FTP , pero el servicio ftp externamente lo tenemos cerrado , por lo que mediante el ataque SSRF vamos a poder tener acceso

    http://ADMIN.FORGE.HTB/upload?u=ftp://user:heightofsecurity123!@FORGE.HTB

    Introducimos esa URL , donde le pasamos el servicio junto con el usuario y la contraseƱa que nos reporta , nos deberia crear la URL con el hash

    Si realizamos el curl sobre la URL que nos a creado , podemos ver que el contenido del FTP del usuario user es el flag del user.txt

    Podemos seguir utilizando esta tecnica para intentar coger el id_rsa del servicio SSH que si esta abierto externamente

    http://ADMIN.FORGE.HTB/upload?u=ftp://user:heightofsecurity123!@FORGE.HTB/.ssh/id_rsa

    Y volvemos a utilizar la misma tecnica de utilizar CURL para ver el contenido y ya podemos ver el id_rsa

    Por lo que vamos a entrar mediante el servicio SSH con el usuario user y con el id_rsa que nos permite no tener que introducir credenciales

    ## Escalada de Privilegios :

    Para poder escalar privilegios vamos a tener que buscar permisos SUID o capabilities , si usamos el comando sudo -l , vamos a ver que tenemos un script con permisos SUID que nos va a permitir ejecutar el script como el usuario Root

    Si le echamos un vistazo al script vamos a poder ver que es un script que se ejecuta en local que para poder acceder tenemos que proporcionarle la contraseƱa que nos muestra en texto plano que es "secretadminpassword" y este script nos permite:

  • Ver los procesos
  • Ver la memoria libre
  • Ver el listado de Sockets
  • Podemos ejecutar el script y ver los diferentes opciones que nos proporciona

    Si hemos estado atentos al codigo del script podemos ver que si logramos crear algun error entonces vamos al except handler dentro del python debugger y hay es cuando vamos a ejecutar una shell como Root

    Por lo que vamos a volver a conectarnos al servicio SSH por segunda vez dejando el script ejecutandose y vamos a crear un error introduciendo por ejemplo cualquier letra aleatoria y mientras tanto vamos a ejecutar el script con pdb en la segunda consola de SSH que hemos abierto

    Vamos a importar el SO y nos vamos a crear una shell de root y una vez la tengamos creado con pdb solo tenemos que salirnos del debugger de python y ejecutar el fichero que hemos creado y ya seremos Root

    Y ya tendriamos la Maquina FORGE con un nivel de dificultad Medio explotada!!